Goal/hypothesis

The goal of this pseudobulk DE analysis was to consider gene expression differences between healthy and septic subjects in all CD66b+ cells in the dataset. To achieve this, we aggregated RNA-seq counts across all CD66b+ cells for each subject. The only variable in the dataset included in the DE model was “sepsis_status”. Sample_status, sample_label, and sample_time were not considered.

The hypothesis being tested is related to a seahorse assay that shows that in samples similar to those described above, the respiration rate of septic subjects was decreased.

Therefore we are looking for gene expression changes in oxidative metabolism genes.

Data

The scRNA dataset used for this analysis was generated by Jack Leary .

The dataset includes all cell types and has been integrated by sample. Total cells were filtered for those with >0 expression of CD66b+.

The input file is named “MDSC_Seurat_CD66b_Only_Integrated_By_Sample.Rds”

Pseudobulk DE Analysis with DESeq2

For this analysis, RNA expression data were aggregated across all cells per-sample. The DESeq2 formulat was exp ~ sepsis_status

The two levels of sepsis status are “Healthy” and “Septic”, and the comparison was made in the direction “Septic relative to Healthy” (i.e. positive fold-changes mean higher expression in septic samples).

P-value adjustment was performed using the Benjamini-Hochberg method.

Download DE analysis results

Volcano plot

Boxplots of significantly (padj < 0.05) DE genes

Gene expression changes (Septic vs. Healthy) in Oxidative Metabolism genes

Clay Mathews sent a list of 895 genes involved in oxidative metabolism to see if there are gene expression differences in CD66b+ cells between septic and healthy subjects. There were no significant differences in these genes, but boxplots for the ten genes with lowest p-values are shown, and the DE results for just these 895 genes can be downloaded.

Boxplots of top DE (not significant; top 10) oxidative metabolism genes

R version: R version 4.2.3 (2023-03-15) 

Directly loaded packages:
EnhancedVolcano version 1.16.0 
ggrepel version 0.9.5 
downloadthis version 0.3.3 
patchwork version 1.2.0 
biomaRt version 2.54.1 
ggplot2 version 3.5.0 
DESeq2 version 1.38.3 
SummarizedExperiment version 1.28.0 
Biobase version 2.58.0 
MatrixGenerics version 1.10.0 
matrixStats version 1.1.0 
GenomicRanges version 1.50.2 
GenomeInfoDb version 1.34.9 
IRanges version 2.32.0 
S4Vectors version 0.36.2 
BiocGenerics version 0.44.0 
Seurat version 4.9.9.9067 
SeuratObject version 4.9.9.9091 
sp version 2.1-4 
dplyr version 1.1.4 
purrr version 1.0.2 
LS0tCnRpdGxlOiAiRGlmZmVyZW50aWFsIEV4cHJlc3Npb24gQW5hbGF5c2lzIChTZXB0aWMgdnMuIEhlYWx0aHkgc3ViamVjdHMpIGluIEh1bWFuIENENjZiKyBjZWxscyIKYXV0aG9yOiAiSGVhdGhlciBLYXRlcyIKZGF0ZTogIjIwMjMtMTAtMDIiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgdGhlbWU6IHBhcGVyCiAgICBoaWdobGlnaHQ6IHRhbmdvCiAgICBjb2RlX2ZvbGRpbmc6IHNob3cKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKICAgIHRvYzogZmFsc2UKICAgIHRvY19kZXB0aDogMwogICAgZGZfcHJpbnQ6IGthYmxlCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFLCBjb21tZW50ID0gTkEpOyBzZXQuc2VlZCgzMTIpCmBgYAoKYGBge3J9CiMgTGlicmFyaWVzIAojIyBSCmxpYnJhcnkocHVycnIpICAgICAgIyBmdW5jdGlvbmFsIHByb2dyYW1taW5nIApsaWJyYXJ5KGRwbHlyKSAgICAgICMgZGF0YSBtYW5pcHVsYXRpb24KbGlicmFyeShTZXVyYXQpICAgICAjIHNjUk5BLXNlcSB0b29scwpsaWJyYXJ5KERFU2VxMikgICAgICMgYnVsayBERSB0ZXN0aW5nCmxpYnJhcnkoZ2dwbG90MikgICAgIyBwbG90cwpsaWJyYXJ5KGJpb21hUnQpICAgICMgZ2VuZSBuYW1lcyAKbGlicmFyeShwYXRjaHdvcmspICAjIHBsb3QgYWxpZ25tZW50CmBgYAoKYGBge3J9CiMjIyBGdW5jdGlvbiBDb25mbGljdHMKc2VsZWN0IDwtIGRwbHlyOjpzZWxlY3QKZmlsdGVyIDwtIGRwbHlyOjpmaWx0ZXIKcmVuYW1lIDwtIGRwbHlyOjpyZW5hbWUKcmVkdWNlIDwtIHB1cnJyOjpyZWR1Y2UKYGBgCgpgYGB7cn0KIyBIZWxwZXIgRnVuY3Rpb25zIAojIGNvbm5lY3QgdG8gRW5zZW1ibCBkYXRhYmFzZSB3aGlsZSBhbGxvd2luZyBmb3IgY29ubmVjdGlvbiB0aW1lb3V0cwplbnNlbWJsX2Nvbm5lY3QgPC0gZnVuY3Rpb24oZGF0YXNldC51c2UgPSAiaHNhcGllbnNfZ2VuZV9lbnNlbWJsIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJ0LnVzZSA9ICJlbnNlbWJsIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLnRyaWVzID0gMTApIHsKICBtYXJ0IDwtIHRyeShiaW9tYVJ0Ojp1c2VEYXRhc2V0KGRhdGFzZXQudXNlLCBiaW9tYVJ0Ojp1c2VNYXJ0KG1hcnQudXNlKSksIHNpbGVudCA9IFRSVUUpCiAgaSA8LSAxCiAgd2hpbGUgKGluaGVyaXRzKG1hcnQsICJ0cnktZXJyb3IiKSAmJiBpIDw9IG4udHJpZXMpIHsKICAgIG1hcnQgPC0gdHJ5KGJpb21hUnQ6OnVzZURhdGFzZXQoZGF0YXNldC51c2UsIGJpb21hUnQ6OnVzZU1hcnQobWFydC51c2UpKSwgc2lsZW50ID0gVFJVRSkKICAgIGkgPC0gaSArIDEKICB9CiAgaWYgKGluaGVyaXRzKG1hcnQsICJ0cnktZXJyb3IiKSAmJiBpID09IG4udHJpZXMpIHsKICAgIHN0b3AoIk51bWJlciBvZiBjb25uZWN0aW9uIGF0dGVtcHRzIGV4Y2VlZGVkOyBjaGVjayBFbnNlbWJsIGF2YWlsYWJpbGl0eSBhdCB3d3cuZW5zZW1ibC5pbmZvIikKICB9CiAgcmV0dXJuKG1hcnQpCn0KIyByZXRyaWV2ZSBFbnNlbWJsIElEIHRvIEhHTkMgc3ltYm9sIG1hcHBpbmcKZ2V0X2dlbmVfbWFwcGluZyA8LSBmdW5jdGlvbihtYXJ0Lm9iaiA9IE5VTEwsIGVuc2VtYmwuaWRzID0gTlVMTCkgewogICMgY2hlY2sgaW5wdXRzCiAgaWYgKGlzLm51bGwobWFydC5vYmopKSB7IHN0b3AoIlBsZWFzZSBwcm92aWRlIGEgTWFydCBkYXRhYmFzZS4iKSB9CiAgaWYgKGlzLm51bGwoZW5zZW1ibC5pZHMpKSB7IHN0b3AoIlBsZWFzZSBwcm92aWRlIGEgdmVjdG9yIG9mIEVuc2VtYmwgSURzLiIpIH0KICAjIHJ1biBxdWVyeSAmIGZvcm1hdAogIGdlbmVfbWFwcGluZyA8LSBkYXRhLmZyYW1lKEVOU0VNQkxfSUQgPSBlbnNlbWJsLmlkcykKICBxdWVyeV9yZXMgPC0gYmlvbWFSdDo6Z2V0Qk0oZmlsdGVycyA9ICJlbnNlbWJsX2dlbmVfaWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gYygiZW5zZW1ibF9nZW5lX2lkIiwgImhnbmNfc3ltYm9sIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBlbnNlbWJsLmlkcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcnQgPSBtYXJ0Lm9iaikgJT4lIAogICAgICAgICAgICAgICBkcGx5cjo6cmVuYW1lKEVOU0VNQkxfSUQgPSBlbnNlbWJsX2dlbmVfaWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhHTkNfU1lNQk9MID0gaGduY19zeW1ib2wpICU+JSAKICAgICAgICAgICAgICAgZHBseXI6OmRpc3RpbmN0KCkKICBnZW5lX21hcHBpbmcgPC0gZHBseXI6OmxlZnRfam9pbihnZW5lX21hcHBpbmcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5X3JlcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgPSAiRU5TRU1CTF9JRCIpICU+JSAKICAgICAgICAgICAgICAgICAgZHBseXI6Om11dGF0ZShIR05DX1NZTUJPTCA9IGRwbHlyOjppZl9lbHNlKEhHTkNfU1lNQk9MID09ICIiLCBOQV9jaGFyYWN0ZXJfLCBIR05DX1NZTUJPTCkpCiAgcmV0dXJuKGdlbmVfbWFwcGluZykKfQojIGZldGNoIEVuc2VtYmwgSUQgZm9yIGEgZ2l2ZW4gSEdOQyBzeW1ib2wKZ2V0X2Vuc2VtYmwgPC0gZnVuY3Rpb24oZ2VuZS5uYW1lID0gTlVMTCwgZ2VuZS50YWJsZSA9IGdlbmVfaWRfdGFibGUpIHsKICAjIGNoZWNrIGlucHV0cyAKICBpZiAoaXMubnVsbChnZW5lLm5hbWUpKSB7IHN0b3AoIlBsZWFzZSBwcm92aWRlIGFuIEhHTkMgc3ltYm9sIHRvIGNvbnZlcnQuIikgfQogICMgY29udmVydCBIR05DIHN5bWJvbCB0byBFbnNlbWJsIElECiAgZW5zZW1ibF9JRCA8LSBkcGx5cjo6ZmlsdGVyKGdlbmVfaWRfdGFibGUsIEhHTkNfU1lNQk9MID09IGdlbmUubmFtZSkgJT4lIAogICAgICAgICAgICAgICAgZHBseXI6OnB1bGwoRU5TRU1CTF9JRCkKICBpZiAoaW5oZXJpdHMoZW5zZW1ibF9JRCwgImRhdGEuZnJhbWUiKSAmJiBucm93KGVuc2VtYmxfSUQpID09IDApIHsKICAgIHN0b3AoIk5vIG1hdGNoaW5nIEVuc2VtYmwgSURzIHdlcmUgZm91bmQgaW4gdGhlIGdpdmVuIGdlbmUgbWFwcGluZyB0YWJsZS4iKQogIH0gCiAgZW5zZW1ibF9JRCA8LSBhcy5jaGFyYWN0ZXIoZW5zZW1ibF9JRCkKICBpZiAobGVuZ3RoKGVuc2VtYmxfSUQpID09IDApIHsKICAgIHN0b3AoIk5vIG1hdGNoaW5nIEVuc2VtYmwgSURzIHdlcmUgZm91bmQgaW4gdGhlIGdpdmVuIGdlbmUgbWFwcGluZyB0YWJsZS4iKQogIH0KICBpZiAobGVuZ3RoKGVuc2VtYmxfSUQpID4gMSkgewogICAgd2FybmluZygiTXVsdGlwbGUgRW5zZW1ibCBJRHMgbWF0Y2ggdGhlIGdpdmVuIEhHTkMgc3ltYm9sLiIpCiAgfQogIHJldHVybihlbnNlbWJsX0lEKQp9CmBgYAoKIyBHb2FsL2h5cG90aGVzaXMKClRoZSBnb2FsIG9mIHRoaXMgcHNldWRvYnVsayBERSBhbmFseXNpcyB3YXMgdG8gY29uc2lkZXIgZ2VuZSBleHByZXNzaW9uIGRpZmZlcmVuY2VzIGJldHdlZW4gaGVhbHRoeSBhbmQgc2VwdGljIHN1YmplY3RzIGluIGFsbCBDRDY2YisgY2VsbHMgaW4gdGhlIGRhdGFzZXQuIFRvIGFjaGlldmUgdGhpcywgd2UgYWdncmVnYXRlZCBSTkEtc2VxIGNvdW50cyBhY3Jvc3MgYWxsIENENjZiKyBjZWxscyBmb3IgZWFjaCBzdWJqZWN0LiBUaGUgb25seSB2YXJpYWJsZSBpbiB0aGUgZGF0YXNldCBpbmNsdWRlZCBpbiB0aGUgREUgbW9kZWwgd2FzICJzZXBzaXNfc3RhdHVzIi4gU2FtcGxlX3N0YXR1cywgc2FtcGxlX2xhYmVsLCBhbmQgc2FtcGxlX3RpbWUgd2VyZSBub3QgY29uc2lkZXJlZC4KClRoZSBoeXBvdGhlc2lzIGJlaW5nIHRlc3RlZCBpcyByZWxhdGVkIHRvIGEgc2VhaG9yc2UgYXNzYXkgdGhhdCBzaG93cyB0aGF0IGluIHNhbXBsZXMgc2ltaWxhciB0byB0aG9zZSBkZXNjcmliZWQgYWJvdmUsIHRoZSByZXNwaXJhdGlvbiByYXRlIG9mIHNlcHRpYyBzdWJqZWN0cyB3YXMgZGVjcmVhc2VkLiAKClRoZXJlZm9yZSB3ZSBhcmUgbG9va2luZyBmb3IgZ2VuZSBleHByZXNzaW9uIGNoYW5nZXMgaW4gb3hpZGF0aXZlIG1ldGFib2xpc20gZ2VuZXMuCgojIERhdGEKClRoZSBzY1JOQSBkYXRhc2V0IHVzZWQgZm9yIHRoaXMgYW5hbHlzaXMgd2FzIGdlbmVyYXRlZCBieSBKYWNrIExlYXJ5IDxqLmxlYXJ5QHVmbC5lZHU+LiAKClRoZSBkYXRhc2V0IGluY2x1ZGVzIGFsbCBjZWxsIHR5cGVzIGFuZCBoYXMgYmVlbiBpbnRlZ3JhdGVkIGJ5IHNhbXBsZS4gVG90YWwgY2VsbHMgd2VyZSBmaWx0ZXJlZCBmb3IgdGhvc2Ugd2l0aCA+MCBleHByZXNzaW9uIG9mIENENjZiKy4KClRoZSBpbnB1dCBmaWxlIGlzIG5hbWVkICJNRFNDX1NldXJhdF9DRDY2Yl9Pbmx5X0ludGVncmF0ZWRfQnlfU2FtcGxlLlJkcyIKCmBgYHtyfQpzZXVfaW50X2hteV9zYW1wX2NkNjZiIDwtIHJlYWRSRFMoIk1EU0NfU2V1cmF0X0NENjZiX09ubHlfSW50ZWdyYXRlZF9CeV9TYW1wbGUuUmRzIikKbWFydCA8LSBlbnNlbWJsX2Nvbm5lY3QoKQpnZW5lX2lkX3RhYmxlIDwtIGdldF9nZW5lX21hcHBpbmcobWFydCwgcm93bmFtZXMoc2V1X2ludF9obXlfc2FtcF9jZDY2YikpCmBgYAoKIyBQc2V1ZG9idWxrIERFIEFuYWx5c2lzIHdpdGggYERFU2VxMmAKCkZvciB0aGlzIGFuYWx5c2lzLCBSTkEgZXhwcmVzc2lvbiBkYXRhIHdlcmUgYWdncmVnYXRlZCBhY3Jvc3MgYWxsIGNlbGxzIHBlci1zYW1wbGUuIFRoZSBERVNlcTIgZm9ybXVsYXQgd2FzIGV4cCB+IHNlcHNpc19zdGF0dXMKClRoZSB0d28gbGV2ZWxzIG9mIHNlcHNpcyBzdGF0dXMgYXJlICJIZWFsdGh5IiBhbmQgIlNlcHRpYyIsIGFuZCB0aGUgY29tcGFyaXNvbiB3YXMgbWFkZSBpbiB0aGUgZGlyZWN0aW9uICJTZXB0aWMgcmVsYXRpdmUgdG8gSGVhbHRoeSIgKGkuZS4gcG9zaXRpdmUgZm9sZC1jaGFuZ2VzIG1lYW4gaGlnaGVyIGV4cHJlc3Npb24gaW4gc2VwdGljIHNhbXBsZXMpLgoKUC12YWx1ZSBhZGp1c3RtZW50IHdhcyBwZXJmb3JtZWQgdXNpbmcgdGhlIEJlbmphbWluaS1Ib2NoYmVyZyBtZXRob2QuCgpgYGB7cn0KIyMjIyMgcHNldWRvYnVsayBhZ2dyZWdhdGlvbiBwZXItc2FtcGxlCiNBZ2dyZWdhdGlvbgpwYl9saXN0IDwtIGRhdGEuZnJhbWUoQWdncmVnYXRlRXhwcmVzc2lvbihzZXVfaW50X2hteV9zYW1wX2NkNjZiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2F5cyA9ICJSTkEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAuYnkgPSAic2FtcGxlIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90ID0gImNvdW50cyIpKQojRWRpdCBwYl9saXN0IGNvbG5hbWVzCmNvbG5hbWVzKHBiX2xpc3QpIDwtIGdzdWIoIlJOQS4iLCIiLGNvbG5hbWVzKHBiX2xpc3QpKQpjb2xuYW1lcyhwYl9saXN0KSA8LSBnc3ViKCJcXC4iLCItIixjb2xuYW1lcyhwYl9saXN0KSkKCnNhbXBsZV9tZXRhZGF0YSA8LSBkaXN0aW5jdChzZXVfaW50X2hteV9zYW1wX2NkNjZiQG1ldGEuZGF0YSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlX3N1YmplY3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlX2xhYmVsLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZV9zdGF0dXMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlX3RpbWUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vwc2lzX3N0YXR1cykgJT4lIAogICAgICAgICAgICAgICBtdXRhdGUoYWNyb3NzKHdoZXJlKGlzLmZhY3RvciksIGRyb3BsZXZlbHMpKSAlPiUgCiAgICAgICAgICAgICAgICAgICAgbWFncml0dHI6OnNldF9yb3duYW1lcyguJHNhbXBsZSkKc2FtcGxlX21ldGFkYXRhJHNhbXBsZSA8LSBnc3ViKCJfIiwiLSIsc2FtcGxlX21ldGFkYXRhJHNhbXBsZSkKcm93bmFtZXMoc2FtcGxlX21ldGFkYXRhKSA8LSBnc3ViKCJfIiwiLSIscm93bmFtZXMoc2FtcGxlX21ldGFkYXRhKSkKCmRlc2VxX29iaiA8LSBERVNlcURhdGFTZXRGcm9tTWF0cml4KHBiX2xpc3RbLCBzYW1wbGVfbWV0YWRhdGEkc2FtcGxlXSwgCiAgICAgICAgICAgICBjb2xEYXRhID0gc2FtcGxlX21ldGFkYXRhLCAKICAgICAgICAgICAgIGRlc2lnbiA9IH5zZXBzaXNfc3RhdHVzKQogICAKZGVzZXFfZGUgPC0gREVTZXEoZGVzZXFfb2JqKQoKZGVzZXFfcmVzIDwtIHJlc3VsdHMoZGVzZXFfZGUsIAogICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHJlc3VsdHNOYW1lcyhkZXNlcV9kZSlbLTFdLCAKICAgICAgICAgICAgICAgICAgICAgICAgIHBBZGp1c3RNZXRob2QgPSAiaG9sbSIpCgpkZXNlcV9yZXNfc2hyaW5rIDwtIGxmY1NocmluayhkZXNlcV9kZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2VmID0gcmVzdWx0c05hbWVzKGRlc2VxX2RlKVstMV0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICJhcGVnbG0iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IGRlc2VxX3JlcykKCmRlc2VxX3Jlc19kZiA8LSBhcy5kYXRhLmZyYW1lKGRlc2VxX3Jlc19zaHJpbmspICU+JSAKICAgICAgICAgICAgICAgICAgICBtdXRhdGUoZW5zZW1ibF9pZCA9IHJvd25hbWVzKC4pKSAlPiUgCiAgICAgICAgICAgICAgICAgICAgbGVmdF9qb2luKGdlbmVfaWRfdGFibGUsIGJ5ID0gYygiZW5zZW1ibF9pZCIgPSAiRU5TRU1CTF9JRCIpKSAlPiUgCiAgICAgICAgICAgICAgICAgICAgcmVuYW1lKGdlbmUgPSBIR05DX1NZTUJPTCkgJT4lIAogICAgICAgICAgICAgICAgICAgIHJlbG9jYXRlKGVuc2VtYmxfaWQsIGdlbmUpCmRlc2VxX3Jlc19kZl91bnNocmluayA8LSBhcy5kYXRhLmZyYW1lKGRlc2VxX3JlcykgJT4lIAogICAgICAgICAgICAgICAgICAgIG11dGF0ZShlbnNlbWJsX2lkID0gcm93bmFtZXMoLikpICU+JSAKICAgICAgICAgICAgICAgICAgICBsZWZ0X2pvaW4oZ2VuZV9pZF90YWJsZSwgYnkgPSBjKCJlbnNlbWJsX2lkIiA9ICJFTlNFTUJMX0lEIikpICU+JSAKICAgICAgICAgICAgICAgICAgICByZW5hbWUoZ2VuZSA9IEhHTkNfU1lNQk9MKSAlPiUgCiAgICAgICAgICAgICAgICAgICAgcmVsb2NhdGUoZW5zZW1ibF9pZCwgZ2VuZSkKYGBgCgojIERvd25sb2FkIERFIGFuYWx5c2lzIHJlc3VsdHMKCmBgYHtyfQpsaWJyYXJ5KGRvd25sb2FkdGhpcykKZGVzZXFfcmVzX2RmICU+JSAKICBkb3dubG9hZF90aGlzKAogICAgb3V0cHV0X25hbWUgPSAiQ0Q2NmJfUHNldWRvYnVsa19TZXB0aWNfdnNfSGVhbHRoeV9ERSIsCiAgICBvdXRwdXRfZXh0ZW5zaW9uID0gIi54bHN4IiwKICAgIGJ1dHRvbl9sYWJlbCA9ICJEb3dubG9hZCByZXN1bHRzIG9mIFBzZXVkb2J1bGsgU2VwdGljIHZzLiBIZWFsdGh5IERFIGFuYWx5c2lzIiwKICAgIGJ1dHRvbl90eXBlID0gImRlZmF1bHQiLAogICAgaGFzX2ljb24gPSBUUlVFLAogICAgaWNvbiA9ICJmYSBmYS1zYXZlIgogICkKYGBgCgojIFZvbGNhbm8gcGxvdCAKCmBgYHtyLGZpZy5kaW09Yyg2LDgpfQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoZ2dyZXBlbCkKCiMgRXh0cmFjdCBwdmFsdWUsIGxvZzJGb2xkQ2hhbmdlLCBhbmQgZ2VuZSBuYW1lCnZvbGNhbm9fZGF0YSA8LSBkZXNlcV9yZXNfZGZfdW5zaHJpbmsgJT4lCiAgc2VsZWN0KGVuc2VtYmxfaWQsIGdlbmUsIHB2YWx1ZSwgcGFkaiwgbG9nMkZvbGRDaGFuZ2UpICU+JQogIG11dGF0ZShuZWdfbG9nMTBfcHZhbHVlID0gLWxvZzEwKHB2YWx1ZSkpCgpsaWJyYXJ5KEVuaGFuY2VkVm9sY2FubykKCiMgQ3JlYXRlIHZvbGNhbm8gcGxvdCB1c2luZyBFbmhhbmNlZFZvbGNhbm8KcCA8LSBFbmhhbmNlZFZvbGNhbm8oCiAgdm9sY2Fub19kYXRhLAogIGxhYiA9IHZvbGNhbm9fZGF0YSRnZW5lLCAjIFVzZSB0aGUgJ2dlbmUnIGNvbHVtbiBmb3IgbGFiZWxpbmcKICB4ID0gJ2xvZzJGb2xkQ2hhbmdlJywKICB5ID0gJ3B2YWx1ZScsCiAgdGl0bGUgPSAiREUgaW4gU2VwdGljIHZzLiBIZWFsdGh5IiwKIHN1YnRpdGxlID0gInBzZXVkb2J1bGsgc2FtcGxlcyAoQ0Q2NmIrIGNlbGxzKSIsCgogIHhsYWIgPSAiTG9nMiBGb2xkIENoYW5nZSIsICMgQ3VzdG9taXplIHgtYXhpcyBsYWJlbAogIHlsYWIgPSAiLUxvZzEwIFAtdmFsdWUiLCAjIEN1c3RvbWl6ZSB5LWF4aXMgbGFiZWwKICBwQ3V0b2ZmID0gMC4wNSwgIyBTZXQgdGhlIHAtdmFsdWUgY3V0b2ZmIGZvciBzaWduaWZpY2FuY2UKICBGQ2N1dG9mZiA9IDEuMCwgIyBBZGp1c3QgZm9sZCBjaGFuZ2UgY3V0b2ZmIGFzIG5lZWRlZAogIHBvaW50U2l6ZSA9IDEuMCwgIyBDdXN0b21pemUgdGhlIHBvaW50IHNpemUKICBsYWJTaXplID0gMy4wLCAjIEN1c3RvbWl6ZSB0aGUgbGFiZWwgc2l6ZQogIGRyYXdDb25uZWN0b3JzID0gVFJVRSwgIyBEcmF3IGxpbmVzIGNvbm5lY3RpbmcgbGFiZWxzIHRvIHBvaW50cwogIHdpZHRoQ29ubmVjdG9ycyA9IDAuNSwgIyBDdXN0b21pemUgdGhlIHdpZHRoIG9mIGNvbm5lY3RvciBsaW5lcwogIHNlbGVjdExhYiA9IHZvbGNhbm9fZGF0YSAlPiUgCiAgICBhcnJhbmdlKHBhZGopICU+JSAKICAgIGhlYWQoMTIpICU+JSAKICAgIHB1bGwoZ2VuZSkgIyBTZWxlY3QgdGhlIHRvcCAxMiBnZW5lcyB0byBsYWJlbAopCnByaW50KHApCmBgYAoKIyBCb3hwbG90cyBvZiBzaWduaWZpY2FudGx5IChwYWRqIDwgMC4wNSkgREUgZ2VuZXMKCmBgYHtyLGZpZy5kaW09Yyg4LDEyKX0KbGlicmFyeShwYXRjaHdvcmspCnJsb2dfY291bnRzIDwtIHJsb2coZGVzZXFfb2JqLCBibGluZCA9IEZBTFNFKQp0cmFuc2Zvcm1lZF9jb3VudHMgPC0gYXNzYXkocmxvZ19jb3VudHMpICAjIFVzZSB2c3RfY291bnRzIGZvciBWU1QKc2lnbmlmaWNhbnRfZ2VuZXMgPC0gZGVzZXFfcmVzX2RmICU+JSBmaWx0ZXIocGFkaiA8IDAuMDUpICU+JSAuJGVuc2VtYmxfaWQKCiMgQXNzdW1pbmcgJ3BiX2xpc3QnIGlzIHlvdXIgcHNldWRvYnVsayBleHByZXNzaW9uIG1hdHJpeApkZl9sb25nIDwtIGFzLmRhdGEuZnJhbWUodCh0cmFuc2Zvcm1lZF9jb3VudHNbc2lnbmlmaWNhbnRfZ2VuZXMsIF0pKQpkZl9sb25nJHNhbXBsZSA8LSByb3duYW1lcyhkZl9sb25nKQoKIyBNZXJnaW5nIHdpdGggc2FtcGxlIG1ldGFkYXRhIHRvIGdldCBzZXBzaXMgc3RhdHVzCmRmX2xvbmcgPC0gbWVyZ2UoZGZfbG9uZywgc2FtcGxlX21ldGFkYXRhLCBieSA9ICJzYW1wbGUiLCBhbGwueCA9IFRSVUUpCgojIENyZWF0ZSBsaXN0IG9mIGJveHBsb3RzCnBsb3RfbGlzdCA8LSBsaXN0KCkKZm9yIChlbnNlbWJsX2lkIGluIHNpZ25pZmljYW50X2dlbmVzKSB7CiAgZ2VuZV9uYW1lIDwtIGRlc2VxX3Jlc19kZltkZXNlcV9yZXNfZGYkZW5zZW1ibF9pZCA9PSBlbnNlbWJsX2lkLCAiZ2VuZSJdCiAgCiAgcCA8LSBnZ3Bsb3QoZGZfbG9uZywgYWVzKHggPSBzZXBzaXNfc3RhdHVzLCB5ID0gISFzeW0oZW5zZW1ibF9pZCksIGZpbGwgPSBzZXBzaXNfc3RhdHVzKSkgKwogICAgICAgZ2VvbV9ib3hwbG90KCkgKwogICAgICAgbGFicyh0aXRsZSA9IGdlbmVfbmFtZSwgeCA9ICIiLCB5ID0gIk5vcm1hbGl6ZWQgRXhwcmVzc2lvbiIpICsKICAgICAgIHRoZW1lX21pbmltYWwoKSArCiAgICAgICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlNldDIiKSArCiAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpCiAgCiAgcGxvdF9saXN0W1tnZW5lX25hbWVdXSA8LSBwCn0KCiMgRGV0ZXJtaW5lIHRoZSBncmlkIGxheW91dApudW1fcGxvdHMgPC0gbGVuZ3RoKHBsb3RfbGlzdCkKbnVtX2NvbHMgPC0gNApudW1fcm93cyA8LSBjZWlsaW5nKG51bV9wbG90cyAvIG51bV9jb2xzKQoKIyBDb21iaW5lIGFsbCBwbG90cyBpbnRvIGEgZ3JpZApjb21iaW5lZF9wbG90IDwtIHdyYXBfcGxvdHMocGxvdF9saXN0LCBuY29sID0gbnVtX2NvbHMpICsKICAgICAgICAgICAgICAgICBwbG90X2Fubm90YXRpb24odGl0bGUgPSAiQm94cGxvdHMgb2YgU2lnbmlmaWNhbnRseSBERSBHZW5lcyBieSBTZXBzaXMgU3RhdHVzIikKCiMgUHJpbnQgdGhlIGNvbWJpbmVkIHBsb3QKcHJpbnQoY29tYmluZWRfcGxvdCkKYGBgCgojIEdlbmUgZXhwcmVzc2lvbiBjaGFuZ2VzIChTZXB0aWMgdnMuIEhlYWx0aHkpIGluIE94aWRhdGl2ZSBNZXRhYm9saXNtIGdlbmVzCgpDbGF5IE1hdGhld3MgPGNsYXl0b24ubWF0aGV3c0BwYXRob2xvZ3kudWZsLmVkdT4gc2VudCBhIGxpc3Qgb2YgODk1IGdlbmVzIGludm9sdmVkIGluIG94aWRhdGl2ZSBtZXRhYm9saXNtIHRvIHNlZSBpZiB0aGVyZSBhcmUgZ2VuZSBleHByZXNzaW9uIGRpZmZlcmVuY2VzIGluIENENjZiKyBjZWxscyBiZXR3ZWVuIHNlcHRpYyBhbmQgaGVhbHRoeSBzdWJqZWN0cy4gVGhlcmUgd2VyZSBubyBzaWduaWZpY2FudCBkaWZmZXJlbmNlcyBpbiB0aGVzZSBnZW5lcywgYnV0IGJveHBsb3RzIGZvciB0aGUgdGVuIGdlbmVzIHdpdGggbG93ZXN0IHAtdmFsdWVzIGFyZSBzaG93biwgYW5kIHRoZSBERSByZXN1bHRzIGZvciBqdXN0IHRoZXNlIDg5NSBnZW5lcyBjYW4gYmUgZG93bmxvYWRlZC4KCgpgYGB7cn0KUk0xX2dlbmVzIDwtIHJlYWQuY3N2KCJSTTEvUk0xLU1ldGFib2xpc21fR2VuZV9MaXN0LmNzdiIpClJNMV9yZXN1bHRzIDwtIGRlc2VxX3Jlc19kZiAlPiUgZmlsdGVyKGdlbmUgJWluJSBSTTFfZ2VuZXMkR2VuZS5TeW1ib2wpCmRlc2VxX3Jlc19kZiAlPiUgCiAgZG93bmxvYWRfdGhpcygKICAgIG91dHB1dF9uYW1lID0gIkNENjZiX1BzZXVkb2J1bGtfU2VwdGljX3ZzX0hlYWx0aHlfREVfT3hNZXRfZ2VuZXMiLAogICAgb3V0cHV0X2V4dGVuc2lvbiA9ICIueGxzeCIsCiAgICBidXR0b25fbGFiZWwgPSAiRG93bmxvYWQgT3hNZXQgZ2VuZXMgc3Vic2V0IGZyb20gcmVzdWx0cyBvZiBQc2V1ZG9idWxrIFNlcHRpYyB2cy4gSGVhbHRoeSBERSBhbmFseXNpcyIsCiAgICBidXR0b25fdHlwZSA9ICJkZWZhdWx0IiwKICAgIGhhc19pY29uID0gVFJVRSwKICAgIGljb24gPSAiZmEgZmEtc2F2ZSIKICApCmBgYAoKIyBCb3hwbG90cyBvZiB0b3AgREUgKG5vdCBzaWduaWZpY2FudDsgdG9wIDEwKSBveGlkYXRpdmUgbWV0YWJvbGlzbSBnZW5lcyAKCmBgYHtyLGZpZy5kaW09Yyg4LDEyKX0KUk0xX3RvcF9nZW5lcyA8LSBSTTFfcmVzdWx0cyAlPiUgYXJyYW5nZSgicHZhbHVlIixuYS5sYXN0PVRSVUUpICU+JSBoZWFkKG49MTApICU+JSAuJGVuc2VtYmxfaWQKCiMgQXNzdW1pbmcgJ3BiX2xpc3QnIGlzIHlvdXIgcHNldWRvYnVsayBleHByZXNzaW9uIG1hdHJpeApSTTFfbG9uZyA8LSBhcy5kYXRhLmZyYW1lKHQodHJhbnNmb3JtZWRfY291bnRzW1JNMV90b3BfZ2VuZXMsIF0pKQpSTTFfbG9uZyRzYW1wbGUgPC0gcm93bmFtZXMoUk0xX2xvbmcpCgojIE1lcmdpbmcgd2l0aCBzYW1wbGUgbWV0YWRhdGEgdG8gZ2V0IHNlcHNpcyBzdGF0dXMKUk0xX2xvbmcgPC0gbWVyZ2UoUk0xX2xvbmcsIHNhbXBsZV9tZXRhZGF0YSwgYnkgPSAic2FtcGxlIiwgYWxsLnggPSBUUlVFKQoKIyBDcmVhdGUgdGhlIGxpc3Qgb2YgYm94cGxvdHMKcGxvdF9saXN0MiA8LSBsaXN0KCkKCmZvciAoZW5zZW1ibF9pZCBpbiBSTTFfdG9wX2dlbmVzKSB7CiAgZ2VuZV9uYW1lIDwtIFJNMV9yZXN1bHRzW1JNMV9yZXN1bHRzJGVuc2VtYmxfaWQgPT0gZW5zZW1ibF9pZCwgImdlbmUiXQogIAogIHAgPC0gZ2dwbG90KFJNMV9sb25nLCBhZXMoeCA9IHNlcHNpc19zdGF0dXMsIHkgPSAhIXN5bShlbnNlbWJsX2lkKSwgZmlsbCA9IHNlcHNpc19zdGF0dXMpKSArCiAgICAgICBnZW9tX2JveHBsb3QoKSArCiAgICAgICBsYWJzKHRpdGxlID0gZ2VuZV9uYW1lLCB4ID0gIlNlcHNpcyBTdGF0dXMiLCB5ID0gIk5vcm1hbGl6ZWQgRXhwcmVzc2lvbiIpICsKICAgICAgIHRoZW1lX21pbmltYWwoKSArCiAgICAgICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlNldDIiKSArCiAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpCiAgCiAgcGxvdF9saXN0MltbZ2VuZV9uYW1lXV0gPC0gcAp9CgojIERldGVybWluZSB0aGUgbnVtYmVyIG9mIHBsb3RzIGFuZCBsYXlvdXQKbnVtX3Bsb3RzIDwtIGxlbmd0aChwbG90X2xpc3QyKQpudW1fY29scyA8LSA0Cm51bV9yb3dzIDwtIGNlaWxpbmcobnVtX3Bsb3RzIC8gbnVtX2NvbHMpCgojIENvbWJpbmUgYWxsIHBsb3RzIGludG8gYSBncmlkIHVzaW5nIHBhdGNod29yawpjb21iaW5lZF9wbG90MiA8LSB3cmFwX3Bsb3RzKHBsb3RfbGlzdDIsIG5jb2wgPSBudW1fY29scykgKwogICAgICAgICAgICAgICAgICBwbG90X2Fubm90YXRpb24odGl0bGUgPSAiQm94cGxvdHMgb2YgVG9wIFJNMSBHZW5lIEV4cHJlc3Npb25zIGJ5IFNlcHNpcyBTdGF0dXMiKQoKIyBQcmludCB0aGUgY29tYmluZWQgcGxvdApwcmludChjb21iaW5lZF9wbG90MikKYGBgCgpgYGB7cn0KIyBDdXN0b20gZnVuY3Rpb24gdG8gcHJpbnQgcmVsZXZhbnQgc2Vzc2lvbiBpbmZvCnByaW50X3JlbGV2YW50X3Nlc3Npb25faW5mbyA8LSBmdW5jdGlvbigpIHsKICBzaSA8LSBzZXNzaW9uSW5mbygpCiAgCiAgIyBSIHZlcnNpb24KICBjYXQoIlIgdmVyc2lvbjoiLCBzaSRSLnZlcnNpb24kdmVyc2lvbi5zdHJpbmcsICJcbiIpCiAgCiAgIyBEaXJlY3RseSBsb2FkZWQgcGFja2FnZXMgKG90aGVyIGF0dGFjaGVkIHBhY2thZ2VzKQogIGNhdCgiXG5EaXJlY3RseSBsb2FkZWQgcGFja2FnZXM6XG4iKQogIGZvciAocGtnIGluIHNpJG90aGVyUGtncykgewogICAgY2F0KHBrZyRQYWNrYWdlLCAidmVyc2lvbiIsIHBrZyRWZXJzaW9uLCAiXG4iKQogIH0KfQoKIyBVc2UgdGhlIGZ1bmN0aW9uCnByaW50X3JlbGV2YW50X3Nlc3Npb25faW5mbygpCgpgYGAKCgo=